#include "BSP.h"


#define PID_LIMIT_SEPARAT
//#define PID_DELTA // 增量式PID

typedef struct{
    #ifdef PID_DELTA
    double err,err_Pre,err_PPre;    // 误差
    
    #else
    
    double err,err_Pre; //当前误差
    double SumI;    // 积分项累加值
    #endif
    
    double target,output;  // 目标
    double Kp,Ki,Kd;    // P,I,D参数
    double OUT_MAX,OUT_MIN; // 输出限幅度
    
    
    #ifdef PID_LIMIT_SEPARAT    // 每项单独限幅
    double P_MAX,I_MAX,D_MAX;
    #endif
} PID;

extern float pitch_Pos, yaw_Pos;

/** @brief  数据采样线程初始化
 *  @note   
 *  @author 江榕煜（2021.4.9）
 *  @param  
 *          IMUptr(WT931_9AxisData *)   陀螺仪数据区指针
 *  @retval
 *          None
**/
void thread_sample_Init(WT931_9AxisData * IMUptr);

/** @brief  数据采样线程初始化
 *  @note   
 *  @author 江榕煜（2021.4.2）
 *  @param 
 *          imuPtr(void *)  IMU数据对象
 *  @retval
 *          None
**/
void thread_balance_Init(void* imuPtr);

/** @brief  云台控制服务初始化
 *  @note   
 *  @author 江榕煜（2021.6.15）
 *  @param  None
 *  @retval
 *          sem_yunTai_t(rt_sem_t)  信号量对象
**/
rt_sem_t thread_yunTai_Init(void);


/** @brief  使能平衡控制接口
 *  @note   
 *  @author 江榕煜（2021.6.15）
 *  @param  None
 *  @retval None
**/
void ENABLE_BALANCE_CTRL(void);

/** @brief  失能平衡控制接口
 *  @note   
 *  @author 江榕煜（2021.6.15）
 *  @param  None
 *  @retval None
**/
void DISABLE_BALANCE_CTRL(void);
